/**
 * 通用分页参数
 */
export interface PageParams {
    pages?: number
    records?: PageParamsRecords
    total?: number
    size?: number
    current?: number
    orders?: PageParamsOrder
}

export type PickPageParams<T extends keyof PageParams> = Required<Pick<PageParams, T>>

/**
 * 字段
 */
export interface PageParamsRecords {
    id?: Long
}

/**
 * 排序
 */
export interface PageParamsOrder {
    column: string // 需要进行排序的字段
    asc: boolean // 是否正序排列 默认 true
}

/**
 * 同城订单搜索参数
 */
export interface IcOrderPageParams extends PageParams {
    status: Exclude<keyof typeof IcOrderStatus, '' | 'ERROR' | 'ARRIVED_SHOP' | 'PRICE_PADDING'>
    icNos?: string[]
}

export const enum IcOrderType {
    // 商家自配
    SELF = 'SELF',
    // UU跑腿
    UUPT = 'UUPT',
}
export const enum IcOrderStatus {
    '' = '',
    /**
     * 运费价格计算 待发单（未发货）
     * 这种状态的单子可以随时丢弃
     */
    PRICE_PADDING = 'PRICE_PADDING',
    /**
     * 待接单
     */
    PENDING = 'PENDING',
    /**
     * 已接单待到店
     */
    TAKEN = 'TAKEN',
    /**
     * 已到店 待取货
     */
    ARRIVED_SHOP = 'ARRIVED_SHOP',
    /**
     * 已取货 配送中
     */
    PICKUP = 'PICKUP',
    /**
     * 已送达
     */
    DELIVERED = 'DELIVERED',
    /**
     * 异常 配送异常
     */
    ERROR = 'ERROR',
}

export interface IcOrder {
    createTime?: string
    updateTime?: string
    id: Long
    version?: number
    deleted?: boolean
    shopId: Long
    type: keyof typeof IcOrderType
    status: keyof typeof IcOrderStatus
    orderNo: string
    pickupCode: Long
    // 各状态时间节点
    times: IcOrderTimes
    clerkUserId?: Long // 接单的店员用户id（商家自配送时生效）
    receiver: Address // 收货地址详情
    skus?: IcOrderSkus[] // 商品列表 第三方平台配送时为空
    remark?: string // 备注
    courier?: IcOrderCourier // 配送员信息
    errorHandler?: IcOrderErrorHandler // 异常状态处理
    // 开放平台相关数据 商家自营时为空
    open?: {
        uuptPriceToken: string // UU跑腿价格计算token
        uuptDesc: string // UU 跑腿开放平台回调时对当前回调状态的描述
    }
    deliverSeconds?: number // 接单时间 (秒)
    icNo: string // 同城配送单号
}
export interface IcOrderErrorHandler {
    status: keyof typeof IcOrderErrorHandlerStatus
}
export const enum IcOrderErrorHandlerStatus {
    RESHIP = 'RESHIP', // 重新发货
    DELIVERED = 'DELIVERED', // 已送达（待收货）
    CLOSE_REFUND = 'CLOSE_REFUND', // 关闭且退款
}
interface IcOrderSkus {
    productName: string
    specs: string[]
    num: number
}
export interface IcOrderCourier {
    name: string
    mobile: string
    avatar?: string
}
export interface IcOrderTimes {
    shippingTime: string // 发货时间
    takeOrderTime?: string // 接单时间
    arrivalShopTime?: string // 到店时间
    pickupTime?: string // 取货时间
    deliveredTime?: string //送达时间
    errorTime?: string // 发生错误的时间
}

export interface Address<T extends keyof typeof GeometryType = GeometryType.Point> {
    id?: Long
    name: string
    mobile: string
    location: Geometry<T>
    address: string
    isDefault: boolean
    area: string[]
}

/**
 * 几何类型
 */
export const enum GeometryType {
    // 点
    Point = 'Point',
    // 多边形
    Polygon = 'Polygon',
}

/**
 * 物理几何描述
 */
export interface Geometry<T extends keyof typeof GeometryType = GeometryType.Point> {
    //类型
    type: T
    //坐标 Point=》Coordinate ｜ Polygon=》Coordinate[]
    coordinates: Coordinates[T]
}

type Coordinates = {
    Point: Coordinate
    Polygon: Coordinate[]
}

/**
 * 单个坐标类型 （地图上可以理解为经纬度和和海拔）
 * 0: 经度 x
 * 1: 纬度 y
 * 2: 海拔 z
 */
export type Coordinate = [number, number, number?]

/**
 * uupt运费详情
 */
export type IcFreightFee = {
    // 每个订单的运费 key 为订单id value为运费详情
    orderPriceMap: {
        [key: string]: {
            total: number // 单总运费
            discount: number // 优惠金额
            pay: number // 实付
        }
    }
    totalPrice: number // 总运费
    balance: number // 当前账户余额
}
